package com.puman.watchtrade.fragment.home;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.Toast;

import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import com.puman.watchtrade.MainActivity;
import com.puman.watchtrade.R;
import com.puman.watchtrade.fragment.home.imageLoader.util.CheckImageLoaderConfiguration;
import com.puman.watchtrade.fragment.home.imageLoader.util.UniversalImageLoadTool;
import com.puman.watchtrade.fragment.home.util.PhotoViewAttacher;
import com.puman.watchtrade.fragment.home.util.PhotoViewAttacher.OnPhotoTapListener;
import com.puman.watchtrade.util.GlobalData;
import com.puman.watchtrade.util.ImageDownloader;
import com.puman.watchtrade.util.OnImageDownload;

public class ImageDetailFragment extends Fragment {
	private String mImageUrl;
	private ImageView mImageView;
	private ProgressBar progressBar;
	private PhotoViewAttacher mAttacher;
	int height;
	public static ImageDetailFragment newInstance(String imageUrl) {
		final ImageDetailFragment f = new ImageDetailFragment();

		final Bundle args = new Bundle();
		args.putString("url", imageUrl);
		f.setArguments(args);

		return f;
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mImageUrl = getArguments() != null ? getArguments().getString("url") : null;

	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		final View v = inflater.inflate(R.layout.image_detail_fragment, container, false);
		mImageView = (ImageView) v.findViewById(R.id.image);
//		mImageView.setScaleType(ScaleType.CENTER_CROP);
		mAttacher = new PhotoViewAttacher(mImageView);
		
		mAttacher.setOnPhotoTapListener(new OnPhotoTapListener() {
			
			@Override
			public void onPhotoTap(View arg0, float arg1, float arg2) {
				getActivity().finish();
			}
		});
		
		progressBar = (ProgressBar) v.findViewById(R.id.loading);
		height = (int) (GlobalData.screenWidth * ((float)400/(float)600));
		return v;
	}
	private ImageDownloader mDownloader;
	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);
		
//		ImageLoader imageLoader = ImageLoader.getInstance(); // Get singleton instance
////		imageLoader.displayImage(mImageUrl, mImageView);
//		DisplayImageOptions options = new DisplayImageOptions.Builder()
//        .showImageOnLoading(R.drawable.icon) // resource or drawable
//        .showImageForEmptyUri(R.drawable.icon) // resource or drawable
//        .showImageOnFail(R.drawable.icon) // resource or drawable
//        .resetViewBeforeLoading(false)  // default
//        .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default
//        .bitmapConfig(Bitmap.Config.ARGB_8888) // default
//        .displayer(new SimpleBitmapDisplayer()) // default
//        .handler(new Handler()) // default
//        .build();
//		ImageSize targetSize = new ImageSize(600, 450); // result Bitmap will be fit to this size
//		imageLoader.loadImage(mImageUrl, targetSize, options, new SimpleImageLoadingListener() {
//		    @Override
//		    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
//		        // Do whatever you want with Bitmap
//		    }
//		});
//		LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
//		LayoutParams layoutParams = (LayoutParams) mImageView.getLayoutParams();
//		layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
//		mImageView.setLayoutParams(layoutParams);
		
//		CheckImageLoaderConfiguration.checkImageLoaderConfiguration(MainActivity.getInstant());
//		UniversalImageLoadTool.display(mImageUrl, (ImageView)mImageView, R.color.transparent);
		
		
//		if (!mImageUrl.equals("")) {
//			String url = "";
//			url = mImageUrl;
//			mImageView.setTag(mImageUrl);
//			if (mDownloader == null) {
//				mDownloader = new ImageDownloader();
//			}
//			if (mDownloader != null) {
//				mDownloader.imageDownload(url, mImageView,
//						"/watchtrade/image", getActivity(), new OnImageDownload() {
//							@Override
//							public void onDownloadSucc(Bitmap bitmap,
//									String c_url, ImageView mimageView) {
//								ImageView imageView = (ImageView) mImageView
//										.findViewWithTag(c_url);
//								Drawable drawable = new BitmapDrawable(bitmap);
//								if (imageView != null) {
//									if (bitmap ==  null) {
//										Log.i("curry", "bitmap is null");
//									}
//									imageView.setImageBitmap(comp(bitmap));
//									imageView.setTag("");
//								}
//							}
//						});
//			}
//		}
		ImageLoader.getInstance().displayImage(mImageUrl, mImageView, new SimpleImageLoadingListener() {
			@Override
			public void onLoadingStarted(String imageUri, View view) {
				progressBar.setVisibility(View.VISIBLE);
			}

			@Override
			public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
//				String message = null;
//				switch (failReason.getType()) {
//				case IO_ERROR:
//					message = "下载错误";
//					break;
//				case DECODING_ERROR:
//					message = "图片无法显示";
//					break;
//				case NETWORK_DENIED:
//					message = "网络有问题，无法下载";
//					break;
//				case OUT_OF_MEMORY:
//					message = "图片太大无法显示";
//					break;
//				case UNKNOWN:
//					message = "未知的错误";
//					break;
//				}
//				Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show();
				progressBar.setVisibility(View.GONE);
			}

			@Override
			public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
				progressBar.setVisibility(View.GONE);
				mAttacher.update();
			}
		});

		
		
		
	}
	
	private Bitmap comp(Bitmap image) {  
	      
	    ByteArrayOutputStream baos = new ByteArrayOutputStream();         
	    image.compress(Bitmap.CompressFormat.JPEG, 100, baos);  
	    if( baos.toByteArray().length / 1024>1024) {//判断如果图片大于1M,进行压缩避免在生成图片（BitmapFactory.decodeStream）时溢出    
	        baos.reset();//重置baos即清空baos  
	        image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//这里压缩50%，把压缩后的数据存放到baos中  
	    }  
	    ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());  
	    BitmapFactory.Options newOpts = new BitmapFactory.Options();  
	    //开始读入图片，此时把options.inJustDecodeBounds 设回true了  
	    newOpts.inJustDecodeBounds = true;  
	    Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);  
	    newOpts.inJustDecodeBounds = false;  
	    int w = newOpts.outWidth;  
	    int h = newOpts.outHeight;  
	    //现在主流手机比较多是800*480分辨率，所以高和宽我们设置为  
	    float hh = 800f;//这里设置高度为800f  
	    float ww = 480f;//这里设置宽度为480f  
	    //缩放比。由于是固定比例缩放，只用高或者宽其中一个数据进行计算即可  
	    int be = 1;//be=1表示不缩放  
	    if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放  
	        be = (int) (newOpts.outWidth / ww);  
	    } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放  
	        be = (int) (newOpts.outHeight / hh);  
	    }  
	    if (be <= 0)  
	        be = 1;  
	    newOpts.inSampleSize = be;//设置缩放比例  
	    //重新读入图片，注意此时已经把options.inJustDecodeBounds 设回false了  
	    isBm = new ByteArrayInputStream(baos.toByteArray());  
	    bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);  
	    return compressImage(bitmap);//压缩好比例大小后再进行质量压缩  
	}  
	private Bitmap compressImage(Bitmap image) {  
		  
        ByteArrayOutputStream baos = new ByteArrayOutputStream();  
        image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法，这里100表示不压缩，把压缩后的数据存放到baos中  
        int options = 100;  
        while ( baos.toByteArray().length / 1024>100) {  //循环判断如果压缩后图片是否大于100kb,大于继续压缩         
            baos.reset();//重置baos即清空baos  
            image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%，把压缩后的数据存放到baos中  
            options -= 10;//每次都减少10  
        }  
        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中  
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片  
        return bitmap;  
    }  
}
